iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Modern Web

寫出好維護又簡潔的 react 程式碼 feat: Function Programming系列 第 15

day15: 模組化好的寫法 - 只公開必要的 Interface 和狀態管理

  • 分享至 

  • xImage
  •  

只公開必要的 Interface

當你在實作一個模組,若過公開全部的參數介面,那其實就失去模組化的意義了,因為你等於將全部的操作都交給外部參數,就跟沒模組化一樣。

像以下是個計算點擊次數的模組

const clickTimes = {
	times:0,
	increment(){
		times++;
	}
	decrement(){
		times--;
	}
	read(){
		return times;
	}
}
export const {increment,decrement, read} = clickTimes; 
// 這邊只公開 increment,decrement, read 的取用方式,避免外部使用者使用 times

狀態管理

像前幾章我們有提到 function 裡面的狀態因為來自外部,所以會造成 side project 的問題,而當

狀態越來越多,程式碼越多越多就越難以管理,這時候我們就需要 pure function 的寫法。

例如我們有個計算數值相加的函式

 let books = 10;
 let pen = 200;

	const sumProduct = ()=>{
		return books+pen;
  }
	sumProduct();
	// 注意到了嗎?假設我們的 books 和 pen 會被其他程式影響,
	// 那我們用 sumProduct 計算出來的數量永遠會不正確

以上是不純的函數,因為 sumProduct 會受到 books 和 pen 的狀態影響

那純函數怎麼實作呢?我們要確保函式只負責 imput 然後執行功能 output 這樣,

以下是純函式:

const sum = (numbers)=>{
 return numbers.reduce((total,current)=>total+current,0);
}

sum([books,pen])

這樣的寫法是不是乾淨許多, sum 只要專注傳入的數值,加總後呈現應該有的結果,

過程中不管狀態,只專注在功能,這樣就是純函式,其實他也是設計模式的工廠模式。


上一篇
day14: 模組化好的寫法 -單一功能原則(2)
下一篇
day16: function programming 是什麼?
系列文
寫出好維護又簡潔的 react 程式碼 feat: Function Programming30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言